3.6.9.8 hmfma-半精度行列ベクトル積和演算の基本動作
あらかじめ行列レジスタに書かれた行列データをAとして 16 次元の半精度行列ベクトル積FMA (Ax+y)を行う。
code:文法
hmfma $l(x|y) <src_x> <src_y> <dst_0> <dst_1>..
第 1 入力の$l(x|y)は読み出し元の行列レジスタであり、以下効果においてsideとして参照する。
第 2 入力の<src_x>および第 3 入力の<src_y>は読み出し元PEオペランドである。
<src_x>はブロックフロート半精度の値でアクセス語長は長語である。
基本動作において<src_y>は通常の単精度の値で、アクセス語長は 2 長語である。
<dst_0> [<dst_1>..]は書き込み先PEオペランドである。
演算結果は複数のPEメモリに同時に書き込むことができるが、以下効果では簡単のため単一の書き込み先としてdstを指定した例を示している。
基本動作において演算結果は通常の単精度であり、書き込みのアクセス語長は 2 長語である。
code:効果.py
for cycle = 0:4
forall chip,l2b,l1b,mab
HalfWord src_data_A1616 = MEMchipl2bl1bmab.refer_matreg(side,HalfWord)
HalfWord src_data_x44 = MEMchipl2bl1bmab0:4.refer_pemem(src_x,cycle)
ShortWord src_data_y44 = MEMchipl2bl1bmab0:4.refer_pemem(src_y, cycle)
ShortWord dst_data16 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
for i= 0:16
for j = 0:16
dst_datai += src_data_Aij *src_data_xj/4j%4
dst_datai += src_data_yi/4i%4
forall pe
MEMchipl2bl1bmabpe.refer_pemem(dst,cycle) = dst_datape*4:(pe+1)*4